Many multi-user operating systems associate privileges with user accounts. When a user installs an application, the application runs in the name of the user and inherits the user's ability to access the system resources. However, modern browsers and device operating systems, such as smartphone operating systems, often treat applications as mutually-untrusting, potentially-malicious principals. In most cases, applications are isolated except for explicit inter-process, or inter-application, communication (IPC) channels. In addition, applications can be unprivileged by default, requiring user permission for additional privileges. In other words, permission to use devices and access user-private data through system application programming interfaces (APIs) may be granted to individual applications by the user.
However, modern permission systems may be undermined by the presence of malicious software within applications. Such malicious software may compromise users' privacy or violate platform providers' security policies. Current approaches focus on preventing malicious applications from reaching end users through manual review of each application that is added to the marketplace. However, this process is costly and time-consuming. Moreover, although approaches exist for monitoring applications in the wild, such as event logging and crash reports or online taint flow analysis, these methods are limited by either the small quantity of data collected or the high performance overhead on the end user.